package com.taoding.springbootbase.util;

import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

import java.io.*;

/**
 * 
* @ClassName: PictureConversionUtil 
* @Description: TODO(base64转换工具类) 
* @author WangLi
* @date 2018年9月18日 下午4:38:05 
*
 */
public class PictureConversionUtil {
	/**
	 * @Description: 将base64编码字符串转换为图片
	 * @Author: 
	 * @CreateTime: 
	 * @param imgStr base64编码字符串
	 * @param path 图片路径-具体到文件
	 * @return
	*/
	public static boolean generateImage(String imgStr, String path) {
	if (imgStr == null){
		return false;
	}
	BASE64Decoder decoder = new BASE64Decoder();
	try {
	// 解密
	byte[] b = decoder.decodeBuffer(imgStr);
	// 处理数据
	for (int i = 0; i < b.length; ++i) {
	if (b[i] < 0) {
	b[i] += 256;
		}
	}
	OutputStream out = new FileOutputStream(path);
	out.write(b);
	out.flush();
	out.close();
	return true;
	} catch (Exception e) {
		return false;
	}
	}
	
	
	
	/**
	 * @Description: 根据图片地址转换为base64编码字符串
	 * @Author: 
	 * @CreateTime: 
	 * @return
	 */
	public static String getImageStr(String imgFile) {
	    InputStream inputStream = null;
	    byte[] data = null;
	    try {
	        inputStream = new FileInputStream(imgFile);
	        data = new byte[inputStream.available()];
	        inputStream.read(data);
	        inputStream.close();
	    } catch (IOException e) {
	        e.printStackTrace();
	    }
	    // 加密
	    BASE64Encoder encoder = new BASE64Encoder();
	    return encoder.encode(data);
	}
	
	/**需要注意的是，一般插件返回的base64编码的字符串都是有一个前缀的。
	 *"data:image/jpeg;base64," 解码之前这个得去掉。
	 * 示例
	 */
	public static void main(String[] args) {
	    String strImg = getImageStr("D:/test1.png");
	    generateImage(strImg, "D:/test2.jpg");
	}
}
